《See MIPS Run》中,将MIPS的异常机制称为“精确异常”(precise exception)。用通俗的语言解释之,由于异常是执行指令时同步发生,因此,在造成异常的指令之前执行的指令,无疑均是有效的。然而,由于MIPS的高度流水体系结构,在引发异常的指令执行时,后面一条指令已经完成了读取和译码的预备工作,万事俱备,只待ALU部件空闲即执行之。当异常产生时,这些预备工作便被废弃。CPU从异常中返回时,再重新做读取和译码的工作因此,我们就可以保证,在异常发生时,异常指令之后所有的指令均不会被执行。这样,就不需要在MIPS的异常处理例程(Exception Handler)中为延迟槽(Delay Slot)指令而烦恼了。。
MIPS CPU提供几种不同方式的复位,与硬件信号区别。
当然软复位或者硬复位是CPU永远也不会返回的异常。 Cause寄存器用来找出发生的一擦很难过类型,决定调用哪个异常处理例程。 MIPS 4KEc 复位。从很多方面来说,把系统重置看作一种异常都是有道理的。特别是在考虑到 R4000及以后的处理器用同一个中断入口地址处理冷启动和热启动的时候。事实上,不可屏蔽中断应该被看作是一个较弱的热启动,和热启动相比,它的唯一区别就是,必须在当前指令被完成之后才生效。 所有异常的入口地址都位于 MIPS存储器映像中不作地址装换的区域,不要高速缓存的入口点位于kseg1,需要高速缓存的位于kseg0。不要高速缓存的入口点当SR(BEV)置位时是固定的,但是当SR(BEV)清零时,就可以对EBase寄存器进行编程来平移所有的入口点一起到别的内存块。 最初的异常向量间的距离缺省为128 个字节,因为 MIPS 的设计者认为对于基本的中断处理,32条指令应该足够了。这样,我们就省掉了跳转指令,而有不浪费太多的内存。